AWS Systems Manager Automation が標準で出来ること(Action, Document) #reinvent
re:Invent 2017 会期中に発表になった AWS Systems Manager ですが、利用するには「何ができるか、どこを作り込まなければならないか」を知る必要があります。
今回は「自動化(Automation)」に限定して、具体的に何が出来るかをまとめてみました。
概要
ここでは AWS Systems Manager Automation の、下記の2項目についてまとめます。
- Automation アクション
- 事前定義済み Automation ドキュメント
AWS Systems Manager Automation はその実行する処理の内容を「ドキュメント」という単位( JSON ファイル)で管理します。
そのドキュメントは、ひとつあるいは複数の「アクション」で成り立っています。ドキュメント = スクリプトとしたら、アクション = 各コマンドと言えるかと思います。
アクション
AWS Systems Manager に組み込まれているアクションをまとめます。細かい説明は下記を参照して下さい。
EC2
アクション | 説明 |
---|---|
aws:changeInstanceState | インスタンスの状態を変更する(running / stopped / terminated) |
aws:runInstances | インスタンスを起動する |
aws:createTags | 新しいタグを作成する |
aws:runCommand | リモートコマンドを実行する |
AMI
アクション | 説明 |
---|---|
aws:createImage | 実行中のインスタンスから AMI を作成する |
aws:deleteImage | AMI を削除する |
aws:copyImage | 任意のリージョンから現在のリージョンに AMI をコピーする |
CloudFormation
アクション | 説明 |
---|---|
aws:createStack | テンプレートから新しい AWS CloudFormation スタックを作成する |
aws:deleteStack | AWS CloudFormation スタックを削除する |
その他
アクション | 説明 |
---|---|
aws:approve | 承認または拒否されるまで、一時的にオートメーションの実行を停止する |
aws:sleep | 自動化の実行を指定する時間で遅延させる |
aws:executeAutomation | セカンダリ自動化ドキュメントを呼び出し実行する |
aws:invokeLambdaFunction | Lambda 関数を実行する |
事前定義済み ドキュメント
AWS Systems Manager には、いくつかのドキュメント(と、そのドキュメントから呼び出される Lambda 関数)が最初から用意されています。下記にそのリストをまとめます(自動化のみ)。
ドキュメント名 | WithApproval | コメント |
---|---|---|
AWS-RestartEC2Instance | ○ | EC2 インスタンスを再起動 (stop/start) する |
AWS-StartEC2Instance | ○ | 停止状態の EC2 インスタンスを起動 (start) する |
AWS-StopEC2Instance | ○ | 起動した状態の EC2 インスタンスを停止 (stop) する |
AWS-TerminateEC2Instance | ○ | EC2 インスタンスを終了・削除する |
AWS-UpdateCloudFormationStack | ○ | CFnスタックをアップデートする |
AWS-DeleteCloudFormationStack | ○ | CFnスタックを削除する |
AWS-UpdateLinuxAmi | AMI をアップデートする(Linux) | |
AWS-UpdateWindowsAmi | AMI をアップデートする(Windows) | |
AWSSupport-ExecuteEC2Rescue | EC2Rescueを実行する | |
AWSSupport-ResetAccess | EC2Rescueを使用してパスワードをリセットする |
「WithApproval」のカラムに「○」が記入されているドキュメントには、実行時に承認操作が必要なドキュメントも別途用意されています。
EC2Rescue は、AWS が用意している非常用のツールです。詳細は下記をご覧下さい。
- Linux 用 EC2Rescue の使用 - Amazon Elastic Compute Cloud
- EC2Rescue for Windows Server の使用 - Amazon Elastic Compute Cloud
所感
用意されているアクションの数は意外と少ないのですが、それを補う aws:invokeLambdaFunction
アクションが強力すぎます。はっきり言ってしまえば「 Lambda を書けば何でも出来る」と言えるでしょう。
ドキュメントのネストも可能(aws:executeAutomation
)なので、部品のようにドキュメントを用意して、approve や sleep を織り交ぜつつワークフローをくみ上げることも可能かと思われます。
一方で、それは「 Lambda を書かなくては出来ることが限られる」ということになるので、各々ワークフローを見極めつつ充実させて行く必要があるようです。正直いまの段階では、自動化については EC2 Systems Manager からほとんど変化がなく、欲を言えば RDS 等の他の AWS サービス用のアクションが標準で欲しくなるのですが、これは今後の拡充に期待でしょうか。
事前定義済みドキュメントから呼び出される既成の Lambda 関数もあるはずなので、こちらについてもいずれ深掘りしてみたいと思います。